package cn.iocoder.yudao.module.reading.service.record;

import cn.iocoder.yudao.module.reading.controller.app.record.vo.ReadingRecordCreateReqVO;
import cn.iocoder.yudao.module.reading.controller.app.record.vo.RecentReadingRespVO;
import cn.iocoder.yudao.module.reading.controller.app.record.vo.TodayReadingRespVO;
import cn.iocoder.yudao.module.reading.controller.app.record.vo.ReadingStatusRespVO;
import cn.iocoder.yudao.module.reading.controller.app.record.vo.ReadingHistoryRespVO;
import cn.iocoder.yudao.module.reading.controller.app.record.vo.ReadingStatsRespVO;
import cn.iocoder.yudao.module.reading.dal.dataobject.record.ReadingRecordDO;

import java.util.List;

/**
 * 阅读记录 Service 接口
 *
 * @author 李晨
 */
public interface ReadingRecordService {

    /**
     * 创建或更新阅读记录
     *
     * @param userId      用户ID
     * @param createReqVO 创建信息
     * @return 记录ID
     */
    Long createOrUpdateReadingRecord(Long userId, ReadingRecordCreateReqVO createReqVO);

    /**
     * 获得阅读记录
     *
     * @param userId 用户ID
     * @param bookId 绘本ID
     * @return 阅读记录
     */
    ReadingRecordDO getReadingRecord(Long userId, Long bookId);

    /**
     * 获得用户最近阅读记录
     *
     * @param userId   用户ID
     * @param language 语言类型（可选）
     * @param limit    限制数量
     * @return 最近阅读列表
     */
    List<RecentReadingRespVO> getRecentReading(Long userId, String language, Integer limit);

    /**
     * 获得今日阅读记录
     *
     * @param userId 用户ID
     * @return 今日阅读记录
     */
    TodayReadingRespVO getTodayReading(Long userId);

    /**
     * 清空最近阅读记录
     *
     * @param userId   用户ID
     * @param language 语言类型（可选）
     */
    void clearRecentReading(Long userId, String language);

    /**
     * 统计用户阅读数据
     *
     * @param userId 用户ID
     * @return 统计数据
     */
    ReadingStatsVO getReadingStats(Long userId);

    /**
     * 获取详细阅读统计数据
     *
     * @param userId 用户ID
     * @return 详细统计数据
     */
    ReadingStatsRespVO getReadingStatsDetail(Long userId);

    /**
     * 获取今日阅读状态
     *
     * @param userId 用户ID
     * @return 今日阅读状态
     */
    ReadingStatusRespVO getTodayReadingStatus(Long userId);

    /**
     * 获取阅读记录历史列表
     *
     * @param userId 用户ID
     * @param page   页码
     * @param size   每页数量
     * @param lang   语言类型（可选）
     * @return 阅读记录历史列表
     */
    List<ReadingHistoryRespVO> getReadingHistory(Long userId, Integer page, Integer size, String lang);

    /**
     * 删除单条阅读记录
     *
     * @param userId   用户ID
     * @param recordId 记录ID
     */
    void deleteReadingRecord(Long userId, Long recordId);

    /**
     * 清空所有阅读记录
     *
     * @param userId 用户ID
     */
    void clearAllReadingRecords(Long userId);

    /**
     * 阅读统计数据
     */
    interface ReadingStatsVO {
        Integer getTotalBooks();
        Integer getTodayBooks();
        Integer getWeekBooks();
        Integer getMonthBooks();
    }

}
